using System;
using System.Collections.Generic;
using System.Text;
using EntidadesTO;
using System.Data;
using System.Data.SqlClient;

namespace AccesoDatos
{
    public class OrdenanzaMunicipalDA
    {
        public int GuardarNuevo(OrdenanzaMunicipalTO pOrdenanzaMunicipal)
        {
            SqlParameter ParametroProyectoId;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            ParametroProyectoId = new SqlParameter("@pNumOrdMunicipal", SqlDbType.Int);
            ParametroProyectoId.Direction = ParameterDirection.Output;

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_ins_SEC_OrdenanzaMunicipal", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pVersionOM", pOrdenanzaMunicipal.VersionOM);
                comando.Parameters.AddWithValue("@pEstado", pOrdenanzaMunicipal.Estado);
                comando.Parameters.AddWithValue("@pFechaEstado", pOrdenanzaMunicipal.FechaEstado);
                comando.Parameters.AddWithValue("@pNumProyOrdMunicipal", pOrdenanzaMunicipal.NumProyOrdMunicipal);

                comando.Parameters.Add(ParametroProyectoId);

                comando.CommandType = CommandType.StoredProcedure;

                comando.ExecuteNonQuery();

                instanciaConexion.CerrarConexion();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }
            return Int32.Parse(ParametroProyectoId.Value.ToString());
        }

        public List<OrdenanzaMunicipalTO> BuscarOrdenanzaFiltro(int pNumOrdenanza, DateTime pFechaIni, DateTime pFechaFin, int pEstado)
        {
            List<OrdenanzaMunicipalTO> listaOrdenanzas = new List<OrdenanzaMunicipalTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_OrdenanzaMunicipal_filter_by_state", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pNumOrdMunicipal", pNumOrdenanza);

                if (pFechaIni != DateTime.MinValue)
                    comando.Parameters.AddWithValue("@pFechaIni", pFechaIni);
                else
                    comando.Parameters.AddWithValue("@pFechaIni", DBNull.Value);

                if (pFechaFin != DateTime.MinValue)
                    comando.Parameters.AddWithValue("@pFechaFin", pFechaFin);
                else
                    comando.Parameters.AddWithValue("@pFechaFin", DBNull.Value);

                comando.Parameters.AddWithValue("@pEstado", pEstado);

                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {

                    OrdenanzaMunicipalTO ordenanzaTO = new OrdenanzaMunicipalTO();
                    ordenanzaTO.NumOrdMunicipal = reader.GetInt32(reader.GetOrdinal("numOrdMunicipal"));
                    ordenanzaTO.VersionOM = reader.GetInt32(reader.GetOrdinal("versionOM"));
                    ordenanzaTO.FechaEstado = reader.GetDateTime(reader.GetOrdinal("fechaEstado"));
                    ordenanzaTO.DesEstadoOM = reader.GetString(reader.GetOrdinal("desEstadoOM"));
                    ordenanzaTO.Estado = reader.GetInt32(reader.GetOrdinal("estado"));
                    ordenanzaTO.NumProyOrdMunicipal = reader.GetInt32(reader.GetOrdinal("numProyOrdMunicipal"));

                    listaOrdenanzas.Add(ordenanzaTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaOrdenanzas = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaOrdenanzas;

        }

        public void Modificar(OrdenanzaMunicipalTO pOrdenanzaMunicipal)
        {

            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_upd_SEC_OrdenanzaMunicipal_state", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pNumOrdMunicipal", pOrdenanzaMunicipal.NumOrdMunicipal);
                comando.Parameters.AddWithValue("@pEstado", pOrdenanzaMunicipal.Estado);
                comando.Parameters.AddWithValue("@pFechaEstado", pOrdenanzaMunicipal.FechaEstado);
                comando.Parameters.AddWithValue("@pVersionOM", pOrdenanzaMunicipal.VersionOM);

                comando.CommandType = CommandType.StoredProcedure;

                comando.ExecuteNonQuery();

                instanciaConexion.CerrarConexion();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }
        }
    }
}
